﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Comm.Utility;

namespace Comm.Web.View
{
    /// <summary>
    /// 父页面类 - 统一做身份验证（是否登录）
    /// </summary>
    public abstract class Basepage : System.Web.UI.Page
    {
        //********不能使用 构造函数 验证登录权限**********8
        //因为 构造函数 是在 第8个事件 调用的，而Session实在 9-11 个事件中加载的
        //public BasePage()
        //{ 
        //    //身份验证的方法 Session
        //}
        BLL.UserTypeInfoService blluserinfo = new BLL.UserTypeInfoService();
        Model.Users userNow = null;
        Model.UserTypeInfo userType = null;
        #region 1.0 统一的访问 当前登录用户 对象 的属性 + MODEL.Users UserNow
        /// <summary>
        /// 统一的访问 当前登录用户 对象 的属性
        /// </summary>
        public Model.Users UserNow
        {
            get
            {
                if (userNow == null)
                {
                    userNow = Session["current_user"] as Model.Users;
                }
                return userNow;
            }
        }
        #endregion

        #region 2.0 Page中 页面生命周期里 调用 的 Page_Load 方法 - Page_Load
        /// <summary>
        /// Page中 页面生命周期里 调用 的 Page_Load 方法
        /// </summary>
        /// 


        public Basepage()
        {
            this.Load += new EventHandler(Page_Load);
        }

        protected void Page_Load(object sender, EventArgs e)
        {
            //1.身份验证的方法 Session
            if (Session["current_user"] == null)
            {
                //1.1既没有 Session 也没有 cookie 则 判断为没有登录
                if (Request.Cookies["current_user"] == null)
                {
                    PageHelper.WriteJsMsg("您尚未登录~~~", "../html/login.html");
                    Response.End();//结束代码（子页面的 SonLoad和前台页面 就不会运行了）
                }
                //1.2如果有Cookie，则 读取Cookie中的用户id，并到数据库中读取 用户对象 存入Session
                else
                {
                    //如果Cookie中有用户id,则 根据id读取用户对象 存入 Session
                    string strId = Request.Cookies["current_user"]["UId"];
                    //验证 strId 是否为 整型
                    //验证成功则读取数据库 ， 并将 用户对象 保存到Session
                    userNow = new BLL.UsersService().QuerySingle(int.Parse(strId));
                    Session["current_user"] = userNow;
                }
            }

            //2.调用子类的 重写方法
            SonLoad();
        }
        #endregion


        #region 3.0 获取当前用户的权限 + Model.UserTypeInfo UserType
        /// <summary>
        /// 获取当前用户的权限
        /// </summary>
        public Model.UserTypeInfo UserType
        {
            get
            {
                IList<Model.UserTypeInfo> list = blluserinfo.getWhereList("");
                foreach (Model.UserTypeInfo model in list)
                {
                    if (model.userId == UserNow.uId)
                    {
                        userType = model;
                    }
                }
                return userType;
            }
        }
        #endregion

        /// <summary>
        /// 3.提供给子类 必须 重写的 一个 方法
        /// </summary>
        public abstract void SonLoad();
    }
}